#include <algorithm>
#include <bitset>
#include <cassert>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <fstream>
#include <iomanip>
#include <iostream>
#include <list>
#include <map>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <utility>
#include <vector>
using namespace std;

#define all(o) (o).begin(), (o).end()
#define allr(o) (o).rbegin(), (o).rend()
const int INF = 2147483647;
typedef long long ll;
typedef pair<int, int> ii;
typedef vector<int> vi;
typedef vector<ii> vii;
typedef vector<vi> vvi;
typedef vector<vii> vvii;
template <class T> int size(T &x) { return x.size(); }

// assert or gtfo

int main()
{
    int n, m, q;
    while (cin >> n >> m >> q && !(n == 0 && m == 0 && q == 0)) {
        vector<string> switches(q), bulbs(q);
        for (int i = 0; i < q; i++) {
            cin >> switches[i] >> bulbs[i];
        }

        for (int i = 0; i < m; i++) {
            // i is the bulb

            int cnt = 0;
            int at = -1;

            for (int j = 0; j < n; j++) {
                // j is a possible switch

                bool ok = true;

                for (int k = 0; k < q; k++) {
                    bool toggles = bulbs[k][i] != (k - 1 < 0 ? '0' : bulbs[k-1][i]);

                    if ((switches[k][j] == '1') != toggles) {
                        ok = false;
                        break;
                    }
                }

                if (ok) {
                    cnt++;
                    at = j;
                }
            }

            // cout << i << " " << cnt << " " << at << endl;

            cout << static_cast<char>(cnt != 1 ? '?' : at < 10 ? at + '0' : at - 10 + 'A');

        }

        cout << endl;
    }


    return 0;
}

